package tests;
import junit.framework.TestCase;
import utilitarios.Circulo;
import utilitarios.Cuadrado;
import utilitarios.PuntoXY;

public class PruebasFigura extends TestCase {
	
	public void testDistanciaEntreFigurasDeberiaSerIgualACero() {
		Circulo c1 = new Circulo(1);
		c1.setCentroMasa(new PuntoXY(0, 0));
		Circulo c2 = new Circulo(1);
		c2.setCentroMasa(new PuntoXY(2, 0));
		
		assertEquals("La distancia no es cero", 0.0, c1.calcularDistancia(c2));
	}
	
	public void testDistanciaEntreFigurasDeberiaSerMenorACero() {
		Circulo c1 = new Circulo(1);
		c1.setCentroMasa(new PuntoXY(0, 0));
		Circulo c2 = new Circulo(1);
		c2.setCentroMasa(new PuntoXY(1, 0));
		
		assertEquals("La distancia no es menor a cero", -1.0, c1.calcularDistancia(c2));
		
	}
	
	public void testDistanciaEntreFigurasDeberiaSerMayorACero() {
		Circulo c1 = new Circulo(1);
		c1.setCentroMasa(new PuntoXY(0, 0));
		Circulo c2 = new Circulo(1);
		c2.setCentroMasa(new PuntoXY(3, 0));
	
		double distancia = c1.calcularDistancia(c2);
		assertEquals("La distancia no es cero", 1.0, distancia);
		
	}
	
	public void testCirculosConDistanciaIgualACeroDeberianEstarEnContacto() {
		Circulo c1 = new Circulo(1);
		c1.setCentroMasa(new PuntoXY(0, 0));
		Circulo c2 = new Circulo(1);
		c2.setCentroMasa(new PuntoXY(2, 0));
		
		/* Los circulos estan en contacto */
		
		assertEquals(true, c1.estaEnContactoCon(c2));
		assertEquals(true, c2.estaEnContactoCon(c1));
	}
	
	public void testCirculosConDistanciaMayorACeroNoDeberianEstarEnContacto() {
		Circulo c1 = new Circulo(1);
		c1.setCentroMasa(new PuntoXY(0, 0));
		Circulo c2 = new Circulo(1);
		c2.setCentroMasa(new PuntoXY(3, 0));
		
		/* Los circulos estan alejados */

		assertEquals(false, c1.estaEnContactoCon(c2));
		assertEquals(false, c2.estaEnContactoCon(c1));
	}
	
	public void testCuadradosConDistanciaIgualACeroDeberianEstarEnContacto() {
		Cuadrado c1 = new Cuadrado(1);
		c1.setCentroMasa(new PuntoXY (0.5, 0.5));
		Cuadrado c2 = new Cuadrado(1);
		c2.setCentroMasa(new PuntoXY (1.5, 0.5));
		
		/* Los cuadrados estan en contacto por el borde */
		
		assertEquals(true, c1.estaEnContactoCon(c2));
		assertEquals(true, c2.estaEnContactoCon(c1));
	}
	
	public void testCuadradoConDistanciaMayorACeroNoDeberianEstarEnContacto() {
		Cuadrado c1 = new Cuadrado(1);
		c1.setCentroMasa(new PuntoXY (0, 0));
		Cuadrado c2 = new Cuadrado(1);
		c2.setCentroMasa(new PuntoXY (4, 0));
		
		/* Los cuadrados estan en contacto */
		
		assertEquals(false, c1.estaEnContactoCon(c2));
		assertEquals(false, c2.estaEnContactoCon(c1));
	}
	
	public void testCirculoYCuadradoADistanciaIgualACeroDeberianEstarContacto() {
		Circulo circ = new Circulo(1);
		circ.setCentroMasa(new PuntoXY (0, 0));
		Cuadrado cuad = new Cuadrado(1);
		cuad.setCentroMasa(new PuntoXY (1.5, 0));
		
		/* El cuadrado y el circulo estan en contacto */
		
		assertEquals(true, circ.estaEnContactoCon(cuad));
		assertEquals(true, cuad.estaEnContactoCon(circ));
	}

}
